package com.itxiao.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itxiao.dao.SysRoleMenuDao;
import com.itxiao.entity.SysRole;
import com.itxiao.entity.SysRoleMenu;
import com.itxiao.pojo.bo.Page;
import com.itxiao.pojo.vo.PageResult;
import com.itxiao.pojo.vo.R;
import com.itxiao.dao.SysRoleDao;
import com.itxiao.service.SysRoleService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * (SysRole)表服务实现类
 *
 * @author makejava
 * @since 2025-09-17 17:14:43
 */
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleDao, SysRole> implements SysRoleService {
    @Resource
    private SysRoleDao sysRoleDao;
    @Resource
    private SysRoleMenuDao sysRoleMenuDao;
    @Override
    public R queryList(Page page) {
        // 1. 查询总记录数
        int total = sysRoleDao.countByPage(page);
        // 2. 查询当前页数据
        List<SysRole> list = sysRoleDao.queryListByPage(page);
        // 3. 封装分页结果
        PageResult<SysRole> result = new PageResult<>(list,total);
        return R.ok(result);
    }

    @Override
    @Transactional
    public R add(SysRole sysRole) {
        int insert = sysRoleDao.insert(sysRole);
        if (insert  == 0) {
            return R.fail("插入失败");
        }
        List<SysRoleMenu> list =new ArrayList<>();
        for (int menuId : sysRole.getMenuIds()) {
            list.add(new SysRoleMenu(0,sysRole.getId(),menuId));
        }
        sysRoleMenuDao.insertBatch(list);
        return R.ok();
    }

    @Override
    @Transactional
    public R updateInfo(SysRole sysRole) {
        int insert = sysRoleDao.updateById(sysRole);
        if (insert  == 0) {
            return R.fail("修改失败");
        }
        Integer roleId = sysRole.getId();
        sysRoleMenuDao.deleteByRoleId(roleId);
        List<SysRoleMenu> list =new ArrayList<>();
        for (int menuId : sysRole.getMenuIds()) {
            list.add(new SysRoleMenu(0,roleId,menuId));
        }
        sysRoleMenuDao.insertBatch(list);
        return R.ok();
    }

    @Override
    public R del(List<Integer> ids) {
        return R.ok(sysRoleDao.deleteBatchIds(ids));
    }
}

